package com.dongdongshop.service.imp;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dongdongshop.pojo.TbGoods;
import com.dongdongshop.pojo.TbGoodsDesc;
import com.dongdongshop.pojo.TbItem;
import com.dongdongshop.service.FreemarkerService;
import com.dongdongshop.service.GoodsService;
import com.dongdongshop.service.ItemService;
import com.dongdongshop.service.TbGoodsDescService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class FreemarkerServiceImp implements FreemarkerService {
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @Reference
    private GoodsService goodsService;
    @Reference
    private TbGoodsDescService tbGoodsDescService;
    @Reference
    private ItemService itemService;

    @Override
    public void createpage(Long goodsId) {

        //第一步：创建一个 Configuration 对象，直接 new 一个对象。构造方法的参数就是 freemarker的版本号。
        Configuration configuration = freeMarkerConfigurer.getConfiguration();
        //第四步：加载一个模板，创建一个模板对象。
        FileWriter fw = null;
        try {
            Template template = configuration.getTemplate("item.ftl");
//      第五步：创建一个模板使用的数据集，可以是 pojo 也可以是 map。一般是 Map。
            Map map = new HashMap();
            //根据goodsId查询goods对象;
            TbGoods goods = goodsService.selectGoodsById(goodsId);
                TbGoodsDesc goodsDesc = tbGoodsDescService.selectGoodDescById(goodsId);
                List<TbItem> itemList = itemService.selectItemById(goodsId);
                map.put("goods", goods);
                map.put("goodsDesc", goodsDesc);
                map.put("itemList", itemList);
                //第六步：创建一个 Writer 对象，一般创建一 FileWriter 对象，指定生成的文件名。
                fw = new FileWriter("E:\\goods\\" + goodsId + ".html");
//            第七步：调用模板对象的 process 方法输出文件。
                template.process(map, fw);
            } catch(Exception e){
                e.printStackTrace();
            } finally{
//            第八步：关闭流// 使用try防止抛异常管不了流
                if (fw != null) {
                    try {
                        fw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
